package app.lockenabler2;

import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.app.admin.DeviceAdminReceiver;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Lock extends DeviceAdminReceiver {
    public static class LockActivity extends Activity {
        private static final int RESULT_ENABLE = 1;// Хрень для DeviceAdmin
        private DevicePolicyManager mDPM;// Хрень для DeviceAdmin
        private Timer mTimer;
        private int mTimeOut;
        private boolean mExitOnTouch;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            Preferences mTimeOutPref = new Preferences("Lock_Screen_Time_Out", this);
            Preferences mExitOnTouchPref = new Preferences("Exit_On_Touch", this);

            // Получаем настройки
            mTimeOut = mTimeOutPref.getValue(2)+1;
            mExitOnTouch = mExitOnTouchPref.getValue(false);

            ComponentName mLockScreenAdmin = new ComponentName(this, Lock.class); // Хрень для DeviceAdmin
            mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); // Хрень для DeviceAdmin

            // Если админ получен, то ...
            if (mDPM.isAdminActive(mLockScreenAdmin)) {
                // Если таймаут равен нулю, то сразу вырубаем
                if (mTimeOutPref.getValue(2) == 0) {
                    mDPM.lockNow();
                    finish();
                    return;
                } else {
                    // рисуем активити и запускаем таймер
                    requestWindowFeature(Window.FEATURE_NO_TITLE);
                    setContentView(R.layout.lock);

                    // Если включена опция "Выход при нажатии, то выходим по клику на окне
                    if (mExitOnTouch) {
                        LinearLayout mLockLayout = (LinearLayout)findViewById(R.id.layout);
                        mLockLayout.setOnClickListener(new View.OnClickListener() {
                            public void onClick(View arg0) {
                                mTimer.cancel();
                                finish();
                                return;
                            }
                        });
                    }

                    // Запускаем таймер
                    mTimer = new Timer();
                    mTimer.scheduleAtFixedRate(new TimerUpdate(), 0, 1000);
                }
            } else { // если админ не получен, то попытаемся получить
                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mLockScreenAdmin);
                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                        getString(R.string.admin_add));
                startActivityForResult(intent, RESULT_ENABLE);
            }
        }

        @Override
        protected void onPause() {
            super.onPause();
            finish();
            return;
        }
        
        @Override
        protected void onStop() {
            super.onStop();
            // Перехватываем нажатие кнопки назад и домик, если включена опция "выход при нажатии"
            if (mExitOnTouch){
                mTimer.cancel();
                finish();
            }
        }

        final class TimerUpdate extends TimerTask {
            public void run() {
                Timer.sendMessage(Message.obtain(Timer));
            }
        }

        private Handler Timer = new Handler() {
            public void handleMessage(Message msg) {
                if (mTimeOut >= 1) {
                    TextView mCounter = (TextView)findViewById(R.id.counter);
                    mCounter.setText(""+mTimeOut);
                    if (mTimeOut == 1){
                        mDPM.lockNow(); //Вырубить!!!!
                    }
                    mTimeOut--;
                } else {
                    if (mTimer != null) {
                        mTimer.cancel();
                        mTimer.purge();
                        finish();
                    }
                }
            }
        };
    }
    
    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return context.getString(R.string.remove_message);
    }
}
